package demo3;
//九、认识异常
/*
5个关键字：throw、try、catch、throws、finally
（1）throw：抛出异常--->出现在方法内部
语法：
public void fun(){
    throw new xxxException("产生异常的原因")

 （2）throws：声明异常--->出现在参数列表后面
 语法：
 修饰符  返回值类型 方法名 （参数列表）throws 异常类型1，异常类型2

（3）try、catch、finally
try{
    将可能出现异常的代码放在这；
    异常一旦抛出，其后面的代码就不会执行。
}catch（要捕获的异常类型  e）{
    对异常进行处理；
    （如果try中的代码抛出异常了，此处catch捕获的异常类型与try中抛出的异常类型
    一致时，或者是try中抛出异常的基类时就会被捕获到）
}finally{
    此处代码一定会被执行，不管有没有捕获异常


 */


//练习自定义异常
/*
实现用户登录功能----用户名、密码
 */

class Login{
    public String userName;
    public String passWord;

    public void LoginOf(String userName,String passWord)throws UserNameException,
            PassWordExceptin{
        try{
            checkUserName(userName);
            checkPassWord(passWord);
            System.out.println("登录成功");

        }catch (UserNameException e){
            System.out.println("========用户名登录错误");
            e.printStackTrace();
        }catch (PassWordExceptin e){
            System.out.println("=========密码登录错误");
            e.printStackTrace();
        }

    }
    public void checkUserName(String userName){
        if(!this.userName.equals(userName)){
            throw new UserNameException("用户名登录异常");
        }
    }
    public void checkPassWord(String passWord){
        if(!this.passWord.equals(passWord)){
            throw new PassWordExceptin("密码登录异常");
        }
    }
}
public class Test8 {
    public static void main(String[] args) {
        Login login=new Login();
        login.userName="lilei";
        login.passWord="123456";

        login.LoginOf("lilei","123456");
    }
}
class UserNameException extends RuntimeException{
    public UserNameException(){

    }
    public UserNameException(String s){
        super(s);
    }
}
class PassWordExceptin extends RuntimeException{
    public PassWordExceptin(){

    }
    public PassWordExceptin(String s){
        super(s);
    }
}